var ERROR_NOTICE = 'Nastąpiła przerwa w dostępie do usługi. Proszę spróbować ponownie. Jeżeli problem będzie się powtarzał skontaktuj się z administratorem serwisu.';

var editInfoRow = function(e) {
	var tr = $(e.currentTarget).closest('tr');
	var code = tr.attr('data-code');
	var form = $('#addInfoModal form');
	form.attr('data-code', code);
	form.find('#inputInfoCode').val(tr.find('.data-code').val());
	form.find('#inputInfoLabel').val(tr.find('.data-label').val());
	form.find('#inputInfoDesc').val(tr.find('.data-description').val());
	form.find('#inputInfoEnLabel').val(tr.find('.data-labelEn').val());
	form.find('#inputInfoEnDesc').val(tr.find('.data-descriptionEn').val());
	form.find('#inputInfoDefault').val(tr.find('.data-default').val());
	form.find('#selectValueTypeLabel').select2('val', tr.find('.data-type').val());
	$('#addInfoForm-add', form).html('Zapisz')
	
	$('#addInfoModal').modal();
}
var editLinkRow = function(e) {
	var tr = $(e.currentTarget).closest('tr');
	var code = tr.attr('data-code');
	var form = $('#addLinkModal form');
	form.attr('data-code', code);
	form.find('#inputLinkCode').val(tr.find('.data-code').val());
	form.find('#inputLinkLabel').val(tr.find('.data-label').val());
	form.find('#inputLinkDesc').val(tr.find('.data-description').val());
	form.find('#inputLinkEnLabel').val(tr.find('.data-labelEn').val());
	form.find('#inputLinkEnDesc').val(tr.find('.data-descriptionEn').val());
	form.find('#inputLinkDefault').val(tr.find('.data-default').val());
	$('#addLinkForm-add', form).html('Zapisz')
	
	$('#addLinkModal').modal();
}
var removeRow = function(e) {
	var tr = $(e.currentTarget).closest('tr');
	tr.remove();
}
var validateForm = function(form) {
	var validate = true;
	$('.required', form).each(function(k, item) {
		if ($(item).val() == '') {
			validate = false;
			$(item).closest('.form-group').addClass('has-error');
		}
	});
	return validate;
}
var getValueByName = function(array, name) {
	for (var i = 0; i < array.length; i++) {
		if (array[i].name == name)
			return array[i].value;
	}
	return null;
}
var preloaderHide = function() {
	$('#preloader').stop().fadeOut(500);
}
var preloaderShow = function() {
	$('#preloader').fadeIn(500);
}
var showMessageBox = function(text, type) {
	var modal = $('#messageModal');
	modal.find('i').removeClass()
	if (type == undefined || type == 'information')
		modal.find('i').addClass('glyphicon glyphicon-info-sign');
	else if (type == 'success')
		modal.find('i').addClass('glyphicon glyphicon-ok-sign');
	else if (type == 'error')
		modal.find('i').addClass('glyphicon glyphicon-exclamation-sign');
	modal.find('#messageModal-text').html(text);
	$('#messageModal').modal();
}
var ajaxSuccessJson = function(data, callback) {
	if (data.status == undefined) {
		var modal = $('#messageModal');
		modal.find('#messageModal-text').html(ERROR_NOTICE);
		$('#messageModal').modal();
	} else if (data.status == false) {
		var modal = $('#messageModal');
		modal.find('#messageModal-text').html(data.message);
		$('#messageModal').modal();
	}
	else {
		if (callback != undefined) {
			callback();
		}
		if (data.message != undefined) {
			var modal = $('#messageModal');
			modal.find('#messageModal-text').html(data.message);
			$('#messageModal').modal();
		}
	}
}
var ajax = function(url, data, callback) {
	$.ajax({
		type: "POST",
		url: url,
		data: data,
		beforeSend: function () {
        	preloaderShow();
		},
		success: function(data, textStatus, xhr) {
			preloaderHide();
			var contentType = xhr.getResponseHeader("content-type");
			if (contentType == 'application/json')
				ajaxSuccessJson(data, callback);
		},
		error: function() {
			preloaderHide();
			var modal = $('#messageModal');
			modal.find('#messageModal-text').html(ERROR_NOTICE);
			$('#messageModal').modal();
		}
	});
}
var removeEditable = function() {
	$('#addSetForm').remove();
	$('#appData .panel-body').prepend('<div class="alert alert-info">Dane aplikacji czekają na akceptacje administratora.</div>');
}
$(document).ready(function() {
	$('#messageModal').on('hidden.bs.modal', function() {
		$(this).find('#messageModal-text').html('');
	});
	$('#panelLoginForm').submit(function(e) {
		if($('#inputAppId', this).val() == '' || $('#inputAppKey', this).val() == '') {
			e.preventDefault();
			if ($('#inputAppId', this).val() == '') {
				$('#inputAppId', this).addClass('error');
			}
			if ($('#inputAppKey', this).val() == '') {
				$('#inputAppKey', this).addClass('error');
			}
		}
	});
	$('input, textarea').focusout(function() {
		if ($(this).hasClass('error') && $(this).val() != '')
			$(this).removeClass('error');
		if ($(this).closest('.form-group').hasClass('has-error') && $(this).val() != '')
			$(this).closest('.form-group').removeClass('has-error');
	});
	$('#showAddInfoDialog').click(function(e) {
		e.preventDefault();
		$('#addInfoModal').modal();
	});
	$('#showAddLinkDialog').click(function(e) {
		e.preventDefault();
		$('#addLinkModal').modal();
	});
	$('select').select2({
		minimumResultsForSearch: 10
	});
	$('#addInfoForm').submit(function(e) {
		e.preventDefault();
		var validate = validateForm(this);
		if (validate) {
			var data = $(this).serializeArray();
			var code = getValueByName(data, 'code');
			var issetCode = false;
			var self = this;
			if ($(this).attr('data-code') == undefined) {
				$('#infoTable > tbody td input[name="info-code[]"]').each(function(k, v) {
					if ($(v).val() == code) {
						issetCode = true;
					}
				});
			} else {
				$('#infoTable > tbody td input[name="info-code[]"]').each(function(k, v) {
					if ($(v).val() != $(self).attr('data-code') && $(v).val() == code) {
						issetCode = true;
					}
				});
			}
			if (issetCode) {
				$('#inputInfoCode').closest('.form-group').addClass('has-error');
				$('.errorBox', this).html('<div class="alert alert-danger">Informacja o kodzie <strong>' + code + '</strong> została już dodana.</div>');
			} else {
				var input;
				var value;
				var tr 
				if ($(this).attr('data-code') == undefined) {
					tr = $('<tr>');
					tr.attr('data-code', code);
				}
				else {
					tr = $('#infoTable tbody tr[data-code="'+$(this).attr('data-code')+'"]');
					tr.attr('data-code', code);
					tr.html('');
				}
				value = getValueByName(data, 'code');
				input = '<input type="hidden" class="uniq-code data-code" name="info['+code+'][code]" value="'+value+'">';
				tr.append($('<td>').html(value + input));
				
				value = getValueByName(data, 'label');
				input = '<input type="hidden" class="data-label" name="info['+code+'][label]" value="'+value+'">';
				tr.append($('<td>').html(value + input));
				
				value = getValueByName(data, 'desc');
				input = '<input type="hidden" class="data-description" name="info['+code+'][desc]" value="'+value+'">';
				tr.append($('<td>').html(value + input));
				
				value = getValueByName(data, 'labelEn');
				input = '<input type="hidden" class="data-labelEn" name="info['+code+'][labelEn]" value="'+value+'">';
				tr.append($('<td>').html(value + input));
				
				value = getValueByName(data, 'descEn');
				input = '<input type="hidden" class="data-descriptionEn" name="info['+code+'][descEn]" value="'+value+'">';
				tr.append($('<td>').html(value + input));
				
				value = getValueByName(data, 'type');
				input = '<input type="hidden" class="data-type" name="info['+code+'][type]" value="'+value+'">';
				tr.append($('<td>').html(value + input));
				
				value = getValueByName(data, 'default');
				input = '<input type="hidden" class="data-default" name="info['+code+'][default]" value="'+value+'">';
				tr.append($('<td>').html(value + input));
				if ($(this).attr('data-code') == undefined)
					$('#infoTable > tbody').append(tr);
				tr.append('<td class="actions"><i class="glyphicon glyphicon-pencil editInfo" title="edytuj"></i><i class="glyphicon glyphicon-minus red removeInfo" title="usuń"></i></td>');
				tr.find('.editInfo').click(editInfoRow);
				tr.find('.removeInfo').click(removeRow);
				$('#addInfoModal').modal('hide');
			}
		}
	});
	$('#addInfoModal').on('hidden.bs.modal', function (e) {
	  $('form', e.currentTarget).trigger('reset').removeAttr('data-code');
	  $('#selectValueTypeLabel', e.currentTarget).select2('val', 'string');
	  $('.has-error', e.currentTarget).removeClass('has-error');
	  $('.errorBox', e.currentTarget).html('');
	  $('#addInfoForm-add', e.currentTarget).html('Dodaj')
	});
	$('#addLinkForm').submit(function(e) {
		e.preventDefault();
		var validate = validateForm(this);
		if (validate) {
			var data = $(this).serializeArray();
			var code = getValueByName(data, 'code');
			var issetCode = false;
			var self = this;
			if ($(this).attr('data-code') == undefined) {
				$('#linkTable > tbody td input.uniq-code').each(function(k, v) {
					if ($(v).val() == code) {
						issetCode = true;
					}
				});
			} else {
				$('#linkTable > tbody td input.uniq-code').each(function(k, v) {
					if ($(v).val() != $(self).attr('data-code') && $(v).val() == code) {
						issetCode = true;
					}
				});
			}
			if (issetCode) {
				$('#inputLinkCode').closest('.form-group').addClass('has-error');
				$('.errorBox', this).html('<div class="alert alert-danger">Link o kodzie <strong>' + code + '</strong> został już dodany.</div>');
			} else {
				var input;
				var value;
				if ($(this).attr('data-code') == undefined) {
					tr = $('<tr>');
					tr.attr('data-code', code);
				}
				else {
					tr = $('#linkTable tbody tr[data-code="'+$(this).attr('data-code')+'"]');
					tr.attr('data-code', code);
					tr.html('');
				}
				
				value = getValueByName(data, 'code');
				input = '<input type="hidden" class="uniq-code data-code" name="link['+code+'][code]" value="'+value+'">';
				tr.append($('<td>').html(value + input));
				
				value = getValueByName(data, 'label');
				input = '<input type="hidden" class="data-label" name="link['+code+'][label]" value="'+value+'">';
				tr.append($('<td>').html(value + input));
				
				value = getValueByName(data, 'desc');
				input = '<input type="hidden" class="data-description" name="link['+code+'][desc]" value="'+value+'">';
				tr.append($('<td>').html(value + input));
				
				value = getValueByName(data, 'labelEn');
				input = '<input type="hidden" class="data-labelEn" name="link['+code+'][labelEn]" value="'+value+'">';
				tr.append($('<td>').html(value + input));
				
				value = getValueByName(data, 'descEn');
				input = '<input type="hidden" class="data-descriptionEn" name="link['+code+'][descEn]" value="'+value+'">';
				tr.append($('<td>').html(value + input));
				
				value = getValueByName(data, 'default');
				input = '<input type="hidden" class="data-default" name="link['+code+'][default]" value="'+value+'">';
				tr.append($('<td>').html(value + input));
				tr.append('<td class="actions"><i class="glyphicon glyphicon-pencil editLink" title="edytuj"></i><i class="glyphicon glyphicon-minus red removeLink" title="usuń"></i></td>');
				if ($(this).attr('data-code') == undefined)
					$('#linkTable > tbody').append(tr);
				tr.find('.editLink').click(editLinkRow);
				tr.find('.removeLink').click(removeRow);
				$('#addLinkModal').modal('hide');
			}
		}
	});
	$('#addLinkModal').on('hidden.bs.modal', function (e) {
		  $('form', e.currentTarget).trigger('reset').removeAttr('data-code');
		  $('.has-error', e.currentTarget).removeClass('has-error');
		  $('.errorBox', e.currentTarget).html('');
		  $('#addLinkForm-add', e.currentTarget).html('Dodaj')
		});
	$('#registerSaveSubmit').click(function(e) {
		e.preventDefault();
		var form = $('#addSetForm');
		ajax(form.attr('action'), form.serialize());
	});
	$('#toAcceptSubmit').click(function(e) {
		e.preventDefault();
		var form = $('#addSetForm');
		ajax(form.attr('action-to-accept'), form.serialize(), removeEditable);
	});
	$('.editInfo').click(editInfoRow);
	$('.editLink').click(editLinkRow);
	$('.removeInfo').click(removeRow);
	$('.removeLink').click(removeRow);
});